package com.opensource.component.query.repository;

import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.opensource.component.query.mapper.ExtendClickhouseBaseMapper;
import java.util.List;

/**
 * @author ZL since on 2021/12/18 下午9:29
 */
public interface ClickhouseExtendRepository<T> {


  /**
   * 查询列表
   *
   * @param wrapper 实体对象封装操作类
   * @return 返回E 类型的列表
   */
  List<T> loadClickhouseExtendList(Wrapper<T> wrapper);

  /**
   * 查询单个对象
   *
   * @param wrapper 实体对象封装操作类
   * @return T
   */
  T loadClickhouseExtendOne(Wrapper<T> wrapper);


  /**
   * 查询count
   *
   * @param wrapper 实体对象封装操作类
   * @return 总数
   */
  long loadClickhouseExtendCount(Wrapper<T> wrapper);


  /**
   * 翻页查询
   *
   * @param page    翻页对象
   * @param wrapper 实体对象封装操作类
   * @return
   */
  Page<T> loadClickhouseExtendPage(IPage<T> page, Wrapper<T> wrapper);

  /**
   * 插入一条记录（选择字段，策略插入）
   *
   * @param entity 实体对象
   */
  default void saveClickhouseExtend(T entity) {
    getBaseMapper().insertClickhouseExtend(entity);
  }

  /**
   * 删除操作
   *
   * @param wrapper 实体对象封装操作类
   */
  default void deleteClickhouseExtend(Wrapper<T> wrapper) {
    getBaseMapper().deleteClickhouseExtend(wrapper);
  }

  /**
   * 修改字段
   *
   * @param wrapper 实体对象封装操作类
   */
  default void updateClickhouseExtend(LambdaUpdateWrapper<T> wrapper) {
    getBaseMapper().updateClickhouseExtend(wrapper);
  }

  /**
   * 获取对应 entity 的 BaseMapper
   *
   * @return BaseMapper
   */
  ExtendClickhouseBaseMapper<T> getBaseMapper();


  /**
   * 获取 entity 的 class
   *
   * @return {@link Class<T>}
   */
  Class<T> getEntityClass();

}
